Kurt Hsu's blog

The Rails developer in taiwan.


  • 首頁

  • 標籤

  • 分類

  • 歸檔

[Rails]form_for action to where

發表於 2018-04-16 更新於 2020-01-19 分類於 Rails

參考文章:
Ruby on Rails Guides
Ruby on Rails 5.2.0
form_for but to post to a different action(stackoverflow)

如何看結果


直接以Ruby on Rails Guides為例子

form.html.erb
1
2
3
4
5
6
<%= form_for @person, url: {action: "create"} do |person_form| %>
<%= person_form.text_field :name %>
<%= fields_for @person.contact_detail do |contact_detail_form| %>
<%= contact_detail_form.text_field :phone_number %>
<% end %>
<% end %>

開啟遊覽器按檢查可以直接看到form_for render出的form tag長得如何

1
2
3
4
5
6
<form class="new_person" id="new_person" action="/people" accept-charset="UTF-8" method="post">
<input name="utf8" type="hidden" value="&#x2713;" />
<input type="hidden" name="authenticity_token" value="bL13x72pldyDD8bgtkjKQakJCpd4A8JdXGbfksxBDHdf1uC0kCMqe2tvVdUYfidJt0fj3ihC4NxiVHv8GVYxJA==" />
<input type="text" name="person[name]" id="person_name" />
<input type="text" name="contact_detail[phone_number]" id="contact_detail_phone_number" />
</form>

再來我們就專注於form這個tag就好!

原理


如剛剛的例子:
1.form_for會先去查看instance是什麼
2.預設去找尋對應的model存不存在
3.如存在會去找對應名稱的controller
4.when new action create, when edit action update

所以此例子會有model/persons.rb和person_controller.rb,且controller應該至少如下:

person_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def new
@person = Person.new
end

def create
@person = Person.find(params[:id])
@person = Person.new(person_params)
@person.save
end

private

def person_params
params.require(:person).permit(:參數)
end

自定義


在form_for裡面可以設定
url:
controller-指定controller
action-指定用controller裡的哪個method
params-傳遞什麼params

method:指定用什麼動作(get, post…等)

例如:

form_html.erb
1
<%= simple_form_for @person, url: {:controller => 'my_controller', :action => 'my_action'}, method: 'post' do |f| %>

更多實際例子可以參考這篇form_for but to post to a different action(stackoverflow)

# Rails # form_for
[Rails] simple_form 簡易使用
[Rails]Ransack最基本使用
  • 文章目錄
  • 本站概要

Kurt Hsu

Progress One Percent Every Day
171 文章
55 分類
163 標籤
RSS
  1. 1. 如何看結果
  2. 2. 原理
  3. 3. 自定義
© 2020 Kurt Hsu
由 Hexo 強力驅動 v3.8.0
|
主題 – NexT.Muse v7.3.0